/**
 * 
 */
package fbv.distribuidora.cliente.negocio;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Hashtable;
import java.util.Map;

import fbv.commun.dataTools.negocio.EntidadeDAO;
import fbv.commun.dataTools.servico.EntidadePadrao;
import fbv.commun.excecoes.FBVException;
import fbv.commun.excecoes.FBVSQLException;
import fbv.commun.util.Util;
import fbv.distribuidora.cliente.servico.Cliente;

/**
 * @author Max Santu
 * 
 */
public class ClienteDAO extends EntidadeDAO {
	private static final String TABLE_NAME = "CLI_CLIENTE";
	private static final String TABLE_COLL_CHAVE_PRIMARIA = "CLI_ID";
	private static final String TABLE_COLL_RAZAO_SOCIAL = "CLI_RAZAO_SOCIAL";
	private static final String TABLE_COLL_ENDERECO = "CLI_ENDERECO";
	private static final String TABLE_COLL_CNPJ = "CLI_CNPJ";
	private static final String TABLE_COLL_DATA_CADASTRO = "CLI_DATA_CADASTRO";
	private static final String TABLE_COLL_USUARIO = "CLI_USUARIO";
	private static final String TABLE_COLL_SENHA = "CLI_SENHA";


	private static ClienteDAO instancia;

	static {
		instancia = new ClienteDAO();
	}

	/**
	 * 
	 */
	private ClienteDAO() {

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#criarEntidade()
	 */
	@Override
	public EntidadePadrao criarEntidade() {
		return new ClienteImpl();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#criarEntidade(java.sql.ResultSet,
	 *      boolean)
	 */
	@Override
	protected EntidadePadrao criarEntidade(ResultSet resultSet, boolean completa) throws FBVException{

		Cliente cliente = new ClienteImpl(); 

		try{
			cliente.setId(resultSet.getInt(ClienteDAO.TABLE_COLL_CHAVE_PRIMARIA));
			cliente.setCnpj(resultSet.getString(ClienteDAO.TABLE_COLL_CNPJ));
			cliente.setRazaoSocial(resultSet.getString(ClienteDAO.TABLE_COLL_RAZAO_SOCIAL));
			cliente.setSenha(resultSet.getString(ClienteDAO.TABLE_COLL_SENHA));
			cliente.setUsuario(resultSet.getString(ClienteDAO.TABLE_COLL_USUARIO));
			cliente.setEndereco(resultSet.getString(ClienteDAO.TABLE_COLL_ENDERECO));
			cliente.setDataCadastro(resultSet.getDate(ClienteDAO.TABLE_COLL_DATA_CADASTRO));
		}
		catch (SQLException e) {
			throw new FBVSQLException(e);
		}

		return cliente;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#getInstancia()
	 */
	public static EntidadeDAO getInstancia() {
		return instancia;
	}

	@Override
	protected String getNomeCampoChave() {
		return TABLE_COLL_CHAVE_PRIMARIA;
	}


	@Override
	protected String getTableName() {
		return TABLE_NAME;
	}


	/* (non-Javadoc)
	 * @see fbv.commun.dataTools.negocio.EntidadeDAO#obterParametrosSQL()
	 */
	@Override
	protected Map obterParametrosSQL(EntidadePadrao entidadePadrao) {
		SimpleDateFormat dateFormat = new SimpleDateFormat();
		dateFormat.applyPattern("yyyy-MM-dd hh:mm:ss");
		Cliente cliente = (Cliente)entidadePadrao;
		Map parametros = new Hashtable();
		if (Util.isCampoPreenchido(cliente.getId())) {
			parametros.put(TABLE_COLL_CHAVE_PRIMARIA, cliente.getId());
		}
		parametros.put(TABLE_COLL_CNPJ, cliente.getCnpj());
		parametros.put(TABLE_COLL_DATA_CADASTRO, dateFormat.format(cliente.getDataCadastro()));
		parametros.put(TABLE_COLL_ENDERECO, cliente.getEndereco());
		parametros.put(TABLE_COLL_RAZAO_SOCIAL, cliente.getRazaoSocial());
		parametros.put(TABLE_COLL_USUARIO, cliente.getUsuario());
		parametros.put(TABLE_COLL_SENHA, cliente.getSenha());
		return parametros;
	}

}
